grammar DSL;

/*
 * Parser Rules
 */

file
	: statements EOF
;

statements
	: statement*
;

statement
	: function? ';'
;

function
	: functionCall block?
;

functionCall 
	: ID '(' parameters? ')'
;

parameters
	: parameter (',' parameter)*
;

parameter
	: '@'ID
	| STRING
	| NUMBER
	| 'true'
	| 'false'
;

block
	: '{' statements '}'
;



COMMONTS	:		'//' .*? '\n' -> skip;

ID			:		LETTER (LETTER|DIGIT)*;
fragment
LETTER		:		[a-zA-Z];

NUMBER		:		'-'?('.'DIGIT+|DIGIT+('.'DIGIT*)?);
fragment
DIGIT		:		[0-9];

STRING		:		'"'('\\"'|.)*?'"';

WHITESPACE          : (' '|'\t'|'\r'|'\n')+ -> skip ;
